<?php
/**
 * Created by PhpStorm.
 * User: Administrator
 * Date: 2017-05-27
 * Time: 10:35
 */

namespace app\admin\controller;


use think\Config;
use think\Controller;

class Base extends Controller
{
    protected $beforeActionList = ['set_param'];

    public function set_param(){
        $this->assign('backend_name',Config::get('backend_name'));
    }
    /**
     * 主模型，控制器处理的主数据对象
     */
    protected $admin_model;


    /**
     * 主模型的 主键，但是对多主键多表就可能失效了
     * 尽量避免多主键的表
     * @var string
     */
    protected $admin_model_pk = 'id';

    /**
     * @var  array 查询过滤条件
     */
    protected $list_filter = null;

    /**
     * @var array 排序等
     */
    protected $list_options = null;


    /**
     * 模块列表视图的默认模版文件名称
     * 有时候可能会修改模版默认的文件，
     * 比如ajax请求的时候使用默认的。但是第一次载入是需要其他的视图
     * @var string
     */
    protected $list_template = 'index';

    /**
     * 管理登录用户的服务类
     */
    protected $service;

    /**
     * 允许执行对action
     * 不做权限检查
     * @var array
     */
    protected $allow_actions = array();

    protected $user_info = false;


    /**
     * 设置 list 查询过滤器
     * 该方法 后期除了修改 list_filter ,list_options 外
     * 还可以 实现获取相关的数据 并赋值给模版
     */
    protected function before_list_model(){}

    /**
     * 编辑表单前 部分页面需要读多张表的时候用到 或其他情况
     * @param array $param
     */
    protected function before_read_model($param=[]){}

    /**
     * 获取相关信息
     * 生成添加 和 编辑 表单页面使用
     */
    protected function after_read_model(){}



    /**
     * 创建对象需要实现的逻辑
     * @param $post
     */
    protected function create($post){}

    /**
     * 更新对象需要实现的逻辑
     * @param $post
     */
    protected function update($post){}

    /**
     *  对分页结果再次处理
     * @param $pages array
     */
    protected function after_list_model(&$pages){}

    /**
     * 删除前
     * @param $ids array | string
     */
    protected function before_delete_model($ids){}


    /**
     * 添加，新建
     */
    public final function get_new(){
        $this->before_read_model($this->request->param());
        if($this->request->method() == 'GET'){
            $this->after_read_model();
            return view('new',['record'=>null]);
        }else{
            return $this->create($this->request->param());
        }
    }

    /**
     * 编辑，更新
     */
    public final function get_edit(){
        $param = $this->request->param();
        if (empty($param['id'])){

        }
        $this->before_read_model($param);
        $this->admin_model=$this->admin_model->where($this->admin_model_pk, $param['id'])->find();
        if($this->request->method() == 'GET'){
            if ($this->admin_model){

            }
            if(!empty($this->admin_model->percentage)){
                $this->admin_model->percentage = json_decode($this->admin_model->percentage,true);
            }
            $this->after_read_model();
            return view('edit',['record'=>$this->admin_model]);
        }else{
            return $this->update($param);
        }
    }



    public function delete(){
        $param = $this->request->param();
        if(!$param['id']){
            $this->render_json(['code'=>201,'message'=>'id丢失']);
        }
        $model = $this->admin_model->where($this->admin_model_pk,$param['id'])->find();
        $model->delete();
        return json(['code'=>0,'message'=>'删除成功']);
    }

    public function delete_status(){
        $param = $this->request->param();
        if(!$param['id']){
            $this->render_json(['code'=>201,'message'=>'id丢失']);
        }
        $model = $this->admin_model->where($this->admin_model_pk,$param['id'])->find();
        $model->is_del = 1;
        $model->save();
        return json(['code'=>0,'message'=>'删除成功']);
    }

    public function return_json($code,$message){
        return json(['code'=>$code,'message'=>$message]);
    }
}